import { ApiProperty } from '@nestjs/swagger';
import { IsNotEmpty, IsOptional, IsString, ValidateIf } from 'class-validator';

export class ExtractImagesDto {
  /**
   * Markdown 文本内容
   * @example '这是一段包含图片的文本 ![](images/image-1.png)'
   */
  @ApiProperty({
    description: 'Markdown 文本内容',
    example: '这是一段包含图片的文本 ![](images/image-1.png)',
    required: false,
  })
  @ValidateIf((o) => !o.filePath)
  @IsNotEmpty({ message: '文本内容和文件路径至少提供一个' })
  @IsString({ message: '文本内容必须是字符串' })
  content?: string;

  /**
   * Markdown 文件路径
   * @example 'E:/documents/example.md'
   */
  @ApiProperty({
    description: 'Markdown 文件路径',
    example: 'E:/documents/example.md',
    required: false,
  })
  @ValidateIf((o) => !o.content)
  @IsNotEmpty({ message: '文本内容和文件路径至少提供一个' })
  @IsString({ message: '文件路径必须是字符串' })
  filePath?: string;

  /**
   * 是否上传图片到 Cloudinary
   * @example true
   */
  @ApiProperty({
    description: '是否上传图片到 Cloudinary',
    example: true,
    required: false,
    default: false,
  })
  @IsOptional()
  uploadImages?: boolean;

  /**
   * 是否生成替换图片链接后的新文件
   * @example true
   */
  @ApiProperty({
    description: '是否生成替换图片链接后的新文件',
    example: true,
    required: false,
    default: false,
  })
  @IsOptional()
  generateNewFile?: boolean;

  /**
   * 上传到 Cloudinary 的文件夹
   * @example 'markdown-images'
   */
  @ApiProperty({
    description: '上传到 Cloudinary 的文件夹',
    example: 'markdown-images',
    required: false,
  })
  @IsOptional()
  @IsString({ message: '文件夹名必须是字符串' })
  folder?: string;
}
